package com.dididoctor.doctor.Utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.media.ThumbnailUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;

import com.dididoctor.doctor.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.core.imageaware.ImageViewAware;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by mahuihuang on 14/12/23.
 */
public class LoaderImage {

    private static List<String> failedList = null;

    private Context context = null;
    private int maxHeight, maxWidth = 0;
    private DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.default_image_loading) // 设置图片下载期间显示的图片
            .showImageForEmptyUri(R.drawable.default_image_onfail) // 设置图片Uri为空或是错误的时候显示的图片
            .showImageOnFail(R.drawable.default_image_onfail) // 设置图片加载或解码过程中发生错误显示的图片
            .resetViewBeforeLoading(false)  // default 设置图片在加载前是否重置、复位
            .delayBeforeLoading(100)  // 下载前的延迟时间
            .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
            .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中
            .considerExifParams(false) // default
            .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
            .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
            .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)
            .build();

    public static DisplayImageOptions chatImageOptions = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.default_image_loading) // 设置图片下载期间显示的图片
            .showImageForEmptyUri(R.drawable.default_image_onfail) // 设置图片Uri为空或是错误的时候显示的图片
            .showImageOnFail(R.drawable.default_image_onfail) // 设置图片加载或解码过程中发生错误显示的图片
            .resetViewBeforeLoading(false)  // default 设置图片在加载前是否重置、复位
            .delayBeforeLoading(100)  // 下载前的延迟时间
            .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
            .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中
            .considerExifParams(false) // default
            .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
            .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
            .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)
            .build();

    public static DisplayImageOptions userHeadImageOptions = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.def_user) // 设置图片下载期间显示的图片
            .showImageForEmptyUri(R.drawable.def_user) // 设置图片Uri为空或是错误的时候显示的图片
            .showImageOnFail(R.drawable.def_user) // 设置图片加载或解码过程中发生错误显示的图片
            .resetViewBeforeLoading(false)  // default 设置图片在加载前是否重置、复位
            .delayBeforeLoading(100)  // 下载前的延迟时间
            .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
            .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中
            .considerExifParams(false) // default
            .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
            .bitmapConfig(Bitmap.Config.ARGB_8888) // default 设置图片的解码类型
            .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)
            .build();


    public LoaderImage(Context context) {
        this(context, 0, 0);
        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));
    }

    public LoaderImage(Context context, int maxHeight, int maxWidth) {
        this.context = context;
        this.maxHeight = maxHeight;
        this.maxWidth = maxWidth;
        if (failedList == null) {
            failedList = new ArrayList<String>();
        }
    }

    public void setOptions(DisplayImageOptions options) {
        this.options = options;
    }

    public LoaderImage(Context context, int maxHeight, int maxWidth, DisplayImageOptions options) {
        this(context);
        this.maxHeight = maxHeight;
        this.maxWidth = maxWidth;
        this.options = options;
    }

    /**
     * 加载指定 url 的图片
     *
     * @param imageView
     * @param url
     */
    public void load(ImageView imageView, String url, ImageLoadingListener imageLoadingListener) {
        if (imageView == null) {
            Log.e("LoaderImage", " ImageView控件为null:" + url);
            return;
        }
        String tag = (String) imageView.getTag();
        if (tag != null && tag.equals(url)) {
            return;
        }
        if (failedList.contains(url)) {
            if (imageView instanceof UserHeadImage) {
                imageView.setImageBitmap(null);
            }
            imageView.setTag(url);
            return;
        }
        imageView.setTag(url);
        ImageLoader.getInstance().displayImage(url, new ImageViewAware(imageView, false), options, imageLoadingListener);
    }

    public void stop() {
        ImageLoader.getInstance().stop();
    }

    public void load(ImageView imageView, String url) {
        this.load(imageView, url, new DefImageLoadingListener());
    }

    private class DefImageLoadingListener implements ImageLoadingListener {
        @Override
        public void onLoadingStarted(String s, View view) {
        }

        @Override
        public void onLoadingFailed(String url, View view, FailReason failReason) {
            if (view instanceof UserHeadImage) {
                ((UserHeadImage) view).setImageBitmap(null);
                view.setTag(url);
            }
            failedList.add(url);
        }

        @Override
        public void onLoadingComplete(String s, View view, Bitmap bitmap) {


            if (maxHeight != 0 && maxWidth != 0) {
                bitmap = ThumbnailUtils.extractThumbnail(bitmap, maxWidth, maxHeight);
            }

            if (view instanceof ImageView) {
                ((ImageView) view).setImageBitmap(bitmap);

            } /*else if (view instanceof ZoomImageView) {
                    ((ZoomImageView) view).setImageBitmap(bitmap);
				} else if (view instanceof UserHeadImage) {
					((UserHeadImage) view).setImageBitmap(bitmap);
				} */ else {
                //view.setBackground(new BitmapDrawable(context.getResources(), bitmap));//低版本的API不支持
                view.setBackgroundDrawable(new BitmapDrawable(context.getResources(), bitmap));
            }
        }

        @Override
        public void onLoadingCancelled(String s, View view) {

        }
    }

    /**
     * 加载云服务器上的一个图片
     *
     * @param imageView
     * @param key
     */
    public void loadImageResource(ImageView imageView, String key) {
        //		load(imageView, ResBox.getImageUrl(key, false));
    }

    public static void clearCache() {
        ImageLoader.getInstance().clearMemoryCache();
        ImageLoader.getInstance().clearDiskCache();
    }
}
